package p44_Indexed;

import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
import org.springframework.stereotype.Indexed;

/**
 * spring在启动过程中，一个一个文件去扫描并注册bean是很耗时的操作
 * 为了优化，引入了一个扫描提前的机制，编译时发现某个类需要被放进容器(加了@Indexed)，就将该类记录进META-INF/spring.components文件
 * 启动时，发现META-INF/spring.components存在，就以它为准找到对应class，判断并加入该bean到容器
 * 否则会遍历所有文件
 * 需要添加该依赖:
 *      <dependency>
 *          <groupId>org.springframework</groupId>
 *          <artifactId>spring-context-indexer</artifactId>
 *          <optional>true</optional>
 *      </dependency>
 */
@Indexed
public class _Indexed {
    public static void main(String[] args) {
        DefaultListableBeanFactory beanFactory = new DefaultListableBeanFactory();
        //指定扫描路径
        ClassPathBeanDefinitionScanner scanner = new ClassPathBeanDefinitionScanner(beanFactory);
        scanner.scan(_Indexed.class.getPackage().getName());

        for (String name : beanFactory.getBeanDefinitionNames()) {
            System.out.println(name);
        }
    }
}
